import {
  api
} from '../../libs/api'
import sys_store from '../modules/system_store'
//获取输入输出设备、通道数
// var topics=sys_store.state.curTopic;
export function getInOutCnt(ctx) {
  api.onRequest('$method.$get.media.mi', null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.devCnt) {
      ctx.$store.dispatch("media/getInputDevCnt", res.data.devCnt);
      ctx.$store.dispatch("media/getInputChCnt", res.data.chCnt);
    }
  })

  api.onRequest('$method.$get.media.mo', null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.devCnt) {
      ctx.$store.dispatch("media/getOutputDevCnt", res.data.devCnt);
      ctx.$store.dispatch("media/getOutputChCnt", res.data.chCnt);
    }
  })

}
//输入设备
export function getInputDevInfo(ctx) {

  api.onRequest('$method.$get.media.mi', null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.devCnt) {
      // ctx.$store.dispatch("media/getInputDevInfo", '');
      ctx.$store.dispatch("media/getInputDevCnt", res.data.devCnt);
      for (var i = 0; i < res.data.devCnt; i++) {
        (function (i) {
          //设备信息
          api.onRequest('$method.$get.media.mi.dev' + i + '', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getInputDevInfo", data.data);
            }
          })
          //输入视频        
          api.onRequest('$method.$get.media.mi.dev' + i + '.viParam', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getInputDevInfo", data.data);
            }
          })
          //输入音频
          api.onRequest('$method.$get.media.mi.dev' + i + '.aiParam', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getInputDevInfo", data.data);
            }
          })
          //loopback
          api.onRequest(`$method.$get.media.mi.dev${i}.loopback`).then(res => {
            var data = JSON.parse(res);
            if (data && data.code == 0) {              
              data.data.index = i
              // data.data.enabled = true
              data.data.isOn = data.data.isOn
              ctx.$store.dispatch("media/getInputDevInfo", data.data);
            } else {
              data.data.index = i
              // data.data.enabled = false
              data.data.isOn = false
              ctx.$store.dispatch("media/getInputDevInfo", data.data);
            }
          }, err => {
            // var data = JSON.parse(err);
            // data.data.index = i
            // ctx.$store.dispatch("media/getLoopBack", data.data);
          });
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getInputDevCnt", 0);
    }
  })
  api.onRequest(`$method.$get.${sys_store.state.curTopic}.mi.info`, null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)    
    // if (res && res.code == 0 && res.data && res.data.maxMiDev) {
    if (res && res.code == 0) {
      // ctx.$store.dispatch("media/getInputDevInfo", '');
      ctx.$store.dispatch("media/getInputZsDevCnt", res.data.maxMiDev);
      // for (var i = 0; i < res.data.maxMiDev; i++) {
      for (var i = 0; i < 6; i++) {
        (function (i) {
          //设备信息
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.mi.dev.` + i + '.info', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= `${sys_store.state.curTopic}`
              ctx.$store.dispatch("media/getInputZsDevInfo", data.data);
            }
          })
          //输入视频        
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.mi.dev.` + i + '.viParam', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= `${sys_store.state.curTopic}`
              ctx.$store.dispatch("media/getInputZsDevInfo", data.data);
            }
          })
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getInputZsDevCnt", 0);
    }
  })
}

//输入通道
export function getInputChannelInfo(ctx) {
  api.onRequest('$method.$get.media.mi', null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.chCnt) {
      // ctx.$store.dispatch("media/getInputChannelInfo", '');
      ctx.$store.dispatch("media/getInputChCnt", res.data.chCnt);
      for (var i = 0; i < res.data.chCnt; i++) {
        (function (i) {
          //媒体流数量、设备组
          api.onRequest('$method.$get.media.mi.ch' + i + '', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= 'media';
              ctx.$store.dispatch("media/getInputChannelInfo", data.data);
              //streams
              var streams = []
              var streamIndex = 0;
              for (var j = 0; j < data.data.streamCnt; j++) {
                (function (j) {
                  api.onRequest('$method.$get.media.mi.ch' + i + '.stream' + j + "", null, null, null, function (message, reqReply) {
                    var streamData = JSON.parse(message);
                    if (streamData && streamData.code == 0 && streamData.data) {
                      streamIndex++;
                      streamData.data.index = j
                      var req = {
                        index: i,
                        stream: streamData.data
                      }
                      ctx.$store.dispatch("media/getInputStream", req);
                    }
                  }.bind(this))
                  //streams.acodec
                  api.onRequest('$method.$get.media.mi.ch' + i + '.stream' + j + ".acodec", null, null, null, function (message, reqReply) {
                    var acodecData = JSON.parse(message);
                    if (acodecData && acodecData.code == 0 && acodecData.data) {
                      acodecData.data.index = j;
                      var req = {
                        index: i,
                        stream: {
                          index: j,
                          audio: acodecData.data,
                        }
                      }
                      ctx.$store.dispatch("media/getInputStream", req);
                    }
                  }.bind(this))
                  //streams.vcodec
                  api.onRequest('$method.$get.media.mi.ch' + i + '.stream' + j + ".vcodec", null, null, null, function (message, reqReply) {
                    var vcodecData = JSON.parse(message);
                    if (vcodecData && vcodecData.code == 0 && vcodecData.data) {
                      vcodecData.data.index = j;
                      var req = {
                        index: i,
                        stream: {
                          index: j,
                          video: vcodecData.data
                        }
                      }
                      ctx.$store.dispatch("media/getInputStream", req);
                    }
                  }.bind(this))
                  //streams.report
                  api.onRequest('$method.$get.media.mi.ch' + i + '.stream' + j + ".streamreport", null, null, null, function (message, reqReply) {
                    var vcodecData = JSON.parse(message);
                    if (vcodecData && vcodecData.code == 0 && vcodecData.data) {
                      vcodecData.data.index = j;
                      var req = {
                        index: i,
                        stream: {
                          index: j,
                          report: vcodecData.datass
                        }
                      }
                      ctx.$store.dispatch("media/getInputStream", req);
                    }
                  }.bind(this))
                })(j)
              }
            }
          }.bind(this))
          //背景图
          api.onRequest('$method.$get.media.mi.ch' + i + '.background', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              console.log('background' + i + ":", data.data)
              ctx.$store.dispatch("media/getInputChannelInfo", data.data);
            }
          }.bind(this))
          //字幕
          for (var j = 0; j < 5; j++) {
            (function (j) {
              api.onRequest('$method.$get.media.mi.ch' + i + '.subtitle' + j + "", null, null, null, function (message, reqReply) {
                var data = JSON.parse(message);
                if (data && data.code == 0 && data.data) {
                  data.data.index = j
                  var req = {
                    index: i,
                    subtitle: data.data
                  }
                  ctx.$store.dispatch("media/getInputSubtitle", req);
                }
              }.bind(this))
            })(j)
          }
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getInputChCnt", 0);
    }
  })
}

export function getInputChStreamReport(ctx) {
  api.onRequest('$method.$get.media.mi', null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.chCnt) {
      ctx.$store.dispatch("media/getInputChCnt", res.data.chCnt);
      for (var i = 0; i < res.data.chCnt; i++) {
        (function (i) {
          //媒体流数量、设备组
          api.onRequest('$method.$get.media.mi.ch' + i + '', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getInputChannelInfo", data.data);
              //streams
              var streams = []
              var streamIndex = 0;
              for (var j = 0; j < data.data.streamCnt; j++) {
                (function (j) {
                  api.onRequest('$method.$get.media.mi.ch' + i + '.stream' + j + ".streamreport", null, null, null, function (message, reqReply) {
                    var vcodecData = JSON.parse(message);
                    if (vcodecData && vcodecData.code == 0 && vcodecData.data) {
                      vcodecData.data.index = j;
                      var req = {
                        index: i,
                        stream: {
                          index: j,
                          report: vcodecData.data
                        }
                      }
                      ctx.$store.dispatch("media/getInputStream", req);
                    }
                  }.bind(this))
                })(j)
              }
            }
          }.bind(this))

        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getInputChCnt", 0);
    }
  })
}

//输出设备
export function getOutputDevInfo(ctx) {
  api.onRequest('$method.$get.media.mo', null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.devCnt) {
      // ctx.$store.dispatch("media/getOutputDevInfo", '');
      ctx.$store.dispatch("media/getOutputDevCnt", res.data.devCnt);
      var count = 0;
      for (var i = 0; i < res.data.devCnt; i++) {
        (function (index) {
          //设备信息
          api.onRequest('$method.$get.media.mo.dev' + index + '', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = index
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getOutputDevInfo", data.data);
            }
          }.bind(this))
          //输出视频
          api.onRequest('$method.$get.media.mo.dev' + index + '.voParam', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = index
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getOutputDevInfo", data.data);
            }
          }.bind(this))
          //输出音频
          api.onRequest('$method.$get.media.mo.dev' + index + '.aoParam', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {

              data.data.index = index
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getOutputDevInfo", data.data);
            }
          }.bind(this))
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getOutputDevCnt", 0);
    }
  }.bind(this))
  api.onRequest(`$method.$get.${sys_store.state.curTopic}.mo.info`, null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    // if (res && res.code == 0 && res.data && res.data.maxMoDev) {
      if (res && res.code == 0) {
      // ctx.$store.dispatch("media/getOutputDevInfo", '');
      ctx.$store.dispatch("media/getOutputZsDevCnt", res.data.maxMoDev);
      var count = 0;
      // for (var i = 0; i < res.data.maxMoDev; i++) {
      for (var i = 0; i < 6; i++) {
        (function (index) {
          //设备信息
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.mo.dev.` + i + '.info', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = index
              data.data.apiType= `${sys_store.state.curTopic}`
              ctx.$store.dispatch("media/getOutputZsDevInfo", data.data);
            }
          }.bind(this))
          //输出视频
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.mo.dev.` + i + '.voParam', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = index
              data.data.apiType= `${sys_store.state.curTopic}`
              ctx.$store.dispatch("media/getOutputZsDevInfo", data.data);
            }
          }.bind(this))
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getOutputZsDevCnt", 0);
    }
  }.bind(this))
}


//输出通道
export function getOutputChannelInfo(ctx) {

  api.onRequest('$method.$get.media.mo', null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.chCnt) {

      // ctx.$store.dispatch("media/getOutputChannelInfo", '');
      ctx.$store.dispatch("media/getOutputChCnt", res.data.chCnt);
      for (var i = 0; i < res.data.chCnt; i++) {
        (function (i) {
          //媒体流数量、设备组
          api.onRequest('$method.$get.media.mo.ch' + i + '', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getOutputChannelInfo", data.data);
            }
          })
          //背景图
          api.onRequest('$method.$get.media.mo.ch' + i + '.background', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getOutputChannelInfo", data.data);
            }
          })
          //低延迟
          api.onRequest('$method.$get.media.mo.ch' + i + '.lowdelay', null, null, null, function (message, reqReply) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              data.data.apiType= 'media'
              ctx.$store.dispatch("media/getOutputChannelInfo", data.data);
            }
          })
          //字幕
          var subtitles = []
          for (var j = 0; j < 5; j++) {
            (function (j) {
              api.onRequest('$method.$get.media.mo.ch' + i + '.subtitle' + j + "", null, null, null, function (message, reqReply) {
                var data = JSON.parse(message);
                if (data && data.code == 0 && data.data) {
                  data.data.index = j
                  var req = {
                    subtitle: data.data,
                    index: i
                  }
                  ctx.$store.dispatch("media/getOutputSubtitle", req);
                }
              })
            })(j)
          }

        })(i)

      }
    } else {
      ctx.$store.dispatch("media/getOutputChCnt", 0);
    }
  })
}

export function getMulticaseInfo(ctx) {
  api.onRequest(
    "$method.$get.stream.transfer.multicast", null, null, null,
    function (msg, reqReply) {
      var res = JSON.parse(msg);
      if (res.code == 0) {
        ctx.$store.dispatch("media/getMulticaseInfo", res.data);
      }
    }.bind(this)
  );
}

//拉流
export function getStremPullInfo(ctx) {
  api.onRequest(`$method.$get.${sys_store.state.curTopic}.streamPull.info`, null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    // if (res && res.code == 0 && res.data && res.data.maxPullCh) {
    if (res && res.code == 0) {
      // ctx.$store.dispatch("media/getStremPullInfo", '');
      ctx.$store.dispatch("media/getStreamPullCnt", res.data.maxPullCh);
      // for (var i = 0; i < res.data.maxPullCh; i++) {
        for (var i = 0; i < res.data.maxPullCh; i++) {
        (function (i) {
          // 获取拉流配置
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.streamPull.ch.` + i + '.cfg', null, null, null, function (message) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getStremPullInfo", data.data);
            }
          })
          //查询状态
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.streamPull.ch.` + i + '.status', null, null, null, function (message) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getStremPullInfo", data.data);
            }
          })
          //场景名
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.streamPull.ch.` + i + '.siteName', null, null, null, function (message) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getStremPullInfo", data.data);
            }
          })
          api.onUnsubscribe(`$data.${sys_store.state.curTopic}.streamPull.ch.${i}.status`, message => {})
          api.onSubscribe(`$data.${sys_store.state.curTopic}.streamPull.ch.${i}.status`, message => {
            var data = {
              index: i,
              status: ''
            }
            console.error(i + ' report:', message)
            if (message.trim()) {
              var obj = JSON.parse(message);
              data.status = obj.status
            }
            ctx.$store.dispatch("media/getStremPullInfo", data);
          })
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getStreamPullCnt", 0);
    }
  })
}
// 推流
export function getStremPushInfo(ctx) {

  api.onRequest(`$method.$get.${sys_store.state.curTopic}.streamPush.info`, null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.maxPushCh) {
      ctx.$store.dispatch("media/getStremPushInfo", '');
      ctx.$store.dispatch("media/getStreamPushCnt", res.data.maxPullCh);
      for (var i = 0; i < res.data.maxPushCh; i++) {        
        (function (i) {
          //设备信息
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.streamPush.ch.` + i + '.dstCfg', null, null, null, function (message) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getStremPushInfo", data.data);
            } else {
              var obj = {
                index: i,
                url: '',
                reconnect: false
              }
              ctx.$store.dispatch("media/getStremPushInfo", obj);
            }
          })
          api.onUnsubscribe(`$data.${sys_store.state.curTopic}.streamPush.ch.${i}.status`, message => {})
          api.onSubscribe(`$data.${sys_store.state.curTopic}.streamPush.ch.${i}.status`, message => {
            var data = JSON.parse(message);
            if (data && data.status){
              var obj = {
                index: i,
                status: data.status
              }
              ctx.$store.dispatch("media/getStremPushInfo", obj);
            }
          })
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getStreamPushCnt", 0);
    }
  })
}

// 音频输出管理
export function getAudioOutInfo(ctx) {
  api.onRequest(`$method.$get.${sys_store.state.curTopic}.ao.info`, null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    // if (res && res.code == 0 && res.data && res.data.maxChNum) {
      if (res && res.code == 0) {
      ctx.$store.dispatch("media/getAudioOutInfo", '');
      ctx.$store.dispatch("media/getAudioOutCnt", res.data.maxChNum);
      // for (var i = 0; i < res.data.maxChNum; i++) {
      for (var i = 0; i < 3; i++) {
        (function (i) {
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.ao.ch.` + i + '.cfg', null, null, null, function (message) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getAudioOutInfo", data.data);
            }
          })
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getAudioOutCnt", 0);
    }
  })
}
// 码流切换管理
export function getStreamSwitchInfo(ctx) {
  api.onRequest(`$method.$get.${sys_store.state.curTopic}.videoMatrix.info`, null, null, null, function (msg, reply) {    
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.matrixs && res.data.matrixs.length) {      
      ctx.$store.dispatch("media/getVideoSwitchInfo", '');
      ctx.$store.dispatch("media/getVideoSwitchCnt", res.data.matrixs.length);
      for (var i = 0; i < res.data.matrixs.length; i++) {
        (function (i) {
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.videoSwitch.ch.` + i + '.cfg', null, null, null, function (message) {
            var data = JSON.parse(message);            
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getVideoSwitchInfo", data.data);
            }
          })
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getVideoSwitchCnt", 0);
    }
  })
}

// 视频输出管理
export function getLayoutSwitchInfo(ctx) {
  api.onRequest(`$method.$get.${sys_store.state.curTopic}.layoutSwitch.info`, null, null, null, function (msg, reply) {
    var res = JSON.parse(msg)
    if (res && res.code == 0 && res.data && res.data.maxChNum) {
      ctx.$store.dispatch("media/getLayoutSwitchInfo", '');
      ctx.$store.dispatch("media/getLayoutSwitchCnt", res.data.maxChNum);
      for (var i = 0; i < res.data.maxChNum; i++) {
        (function (i) {
          api.onRequest(`$method.$get.${sys_store.state.curTopic}.layoutSwitch.ch.` + i + '.cfg', null, null, null, function (message) {
            var data = JSON.parse(message);
            if (data && data.code == 0 && data.data) {
              data.data.index = i
              ctx.$store.dispatch("media/getLayoutSwitchInfo", data.data);
            }
          })
        })(i)
      }
    } else {
      ctx.$store.dispatch("media/getLayoutSwitchCnt", 0);
    }
  })
}